class CDXStreamingSound;
class CDXSoundManager;
class CDXSound;
struct IDirectSound3DListener;
enum ESoundType;
enum EStreamingSoundType;

enum EPlaySoundFlags
{
    ePlaySoundFlags_None = 0,
    ePlaySoundFlags_Loop = 0x1,
};

class CSoundManager
{
public:
    CSoundManager();
    void Initialize();
    void Cleanup();
    void PlaySound(ESoundType eSoundType, EPlaySoundFlags ePlaySoundFlags = ePlaySoundFlags_None);
    void StopSound(ESoundType eSoundType);
    void PlaySoundStreaming(EStreamingSoundType eStreamingSoundType, EPlaySoundFlags ePlaySoundFlags = ePlaySoundFlags_None);
    void PlaySound3D(ESoundType eSoundType, const Ogre::Vector3& vectorLocation, EPlaySoundFlags ePlaySoundFlags = ePlaySoundFlags_None);
    void SetListenerPosition(const Ogre::Vector3& vectorLocation);
    void Update();

private:
    void LoadSounds();
    void ClearSounds();

    CDXSoundManager* m_pDXSoundManager;

    typedef vector<CDXSound*> CSoundList;
    CSoundList m_rgpSoundList;

    CDXStreamingSound* m_pStreamingSound;
    HANDLE m_hNeedsStreamingData;

    IDirectSound3DListener* m_pListener;
    Ogre::Vector3 m_vectorListener;
};
enum ESoundType
{
    eSoundType_Click,
    eSoundType_Rollover,
    eSoundType_Typing,
    eSoundType_TorpFired,
    eSoundType_PhaserFired,
    eSoundType_PlayerCloaked,
    eSoundType_PlayerDecloaked,
    eSoundType_TorpHit,
    eSoundType_Tractor,
    eSoundType_Count
};

enum EStreamingSoundType
{
    eStreamingSoundType_MusicDefault,
};



